package main

import (
	"fmt"
	"net/http"
)

//定义注册请求数据的结构体
type signUpReq struct {
	Email             string `json:"email"`
	Password          string `json:"password"`
	ConfirmedPassword string `json:"confirmed_password"`
}

//定义响应数据的结构体
type commonResponse struct {
	Msg  string      `json:"msg"`
	Data interface{} `json:"data"`
}

func home(ctx *Context) {
	fmt.Fprintf(ctx.W, "这是主页")
}

func signUp(ctx *Context) {
	//创建新的结构体 用于存放client的请求数据
	req := &signUpReq{}
	// //创建context
	// ctx := NewContext(w, r)
	//读取数据、解析数据
	err := ctx.ReadJson(req)
	if err != nil {
		_ = ctx.RespBadJson(&commonResponse{
			Msg:  "Bad",
			Data: fmt.Sprintf("ReadJson-ERROR-%v", err),
		})
		return
	}
	//拿到反序列化req数据 就可以去做进一步处理 如进行真正注册、写入数据库等等
	//这里只是做一下简单打印
	fmt.Printf("Log-Req-%v", req)

	err = ctx.RespOKJson(&commonResponse{
		Msg:  "Success",
		Data: "Sign up successful",
	})
	if err != nil {
		//如果发生错误，可做一下log记录 这里只是简单打印一下
		fmt.Printf("Log-WriterJson-ERROR-%v", err)
	}
}

func main() {
	// //注册路由 当命中路由后会执行后面的func
	// http.HandleFunc("/", home)
	// http.HandleFunc("/signup", signUp)
	// //启动服务监听
	// http.ListenAndServe(":8080", nil)

	server := NewSdkHttp("web-server-demo")
	server.Route(http.MethodGet, "/", home)
	server.Route(http.MethodPost, "/signup", signUp)
	server.Start(":8080")
}
